// 静态资源服务器
const fs = require('fs')
const path = require('path')
const URL = require('url')
const http = require('http')
const app = http.createServer()


/**
 * 获取指定的文件内容
 * @param {*} url
 */
function getFileInfo(url) {
    return fs.promises.readFile(url)  // 使用文件流更好
}

/**
 * 文件是否存在
 * @param {*} filename
 */
async function isFile(filename) {
    try {
        return await fs.promises.stat(filename)
    } catch (e) {
        return null
    }
}

/**
 * 静态文件处理
 * @param {*} url
 */
async function staticHandle(url) {
    let filename = URL.parse(url).pathname
    filename = path.resolve(__dirname, 'public', filename.substring(1))
    const stat = await isFile(filename)
    let file = null
    if (!stat) { // 文件不存在
        return null
    } else if (stat.isDirectory()) { // 文件夹  默认访问下面的 index.html
        const filename2 = path.resolve(filename, 'index.html')
        const stat2 = await isFile(filename2)
        if (!stat2) { // 文件夹下不存在 index.html
            return null
        } else {
            file = await getFileInfo(filename2)
        }
    } else { // 文件
        file = await getFileInfo(filename)
    }
    return file
}


app.on('request', async (req, res) => {
    const file = await staticHandle(req.url)
    if (file) res.end(file);

    // 其他处理
    // res.end('其他处理')

    res.statusCode = 404
    res.end('404 is not found')
})

app.listen(3000, () => console.log('start http:localhost:3000'))